#include <iostream>
using namespace std;

struct Test1{
    unsigned char a:1;
};

struct Test2{
    bool a:1;
};

int main(int argc, const char *argv[]){
    bool b1 = true;
    cout << sizeof(bool) << endl; // 1
    cout << sizeof(b1) << endl; // 1

    b1 = 12345678; // 这样赋值也不会有警告  
    // 原因是赋值时由于=右边是非0 就直接用1赋值了 并不会实际存储 12345678
    //char c1 = 12345678; // 这样赋值会有警告 因为存不下

    struct Test1 t1;
    //t1.a = 100; // 警告 因为超过了存储范围

    struct Test2 t2;
    t2.a = 100; // 即使成员a只占1个bit位 
                // 赋值100 也不会有警告 因为100非0 赋值时赋1了

    return 0;
}